# -*- encoding:utf-8 -*-

# 导入form相关的
from wtforms import Form,StringField,IntegerField
# 导入验证相关的
from wtforms.validators import Email,InputRequired,Length,EqualTo

# 用于邮箱与其对应的验证码对应
from wtforms import ValidationError

from flask import g

from utils import lhcache

# 表单优化
from ..forms import BaseForm

# 表单的作用   迁移场景
# 编写登陆信息的验证


# 导入BaseForm，后需要继承父类
class LoginForm(BaseForm):
# class LoginForm(Form):
    # 解析总结写法规律,也是重点
    email = StringField(validators=[Email(message='请输入正确的邮箱格式'),InputRequired(message='请输入邮箱')])
    password = StringField(validators=[Length(6,10,message='请输入正确的格式密码')])
    #因为remember可传可不传，所以不要验证器
    remember = IntegerField()


# 导入BaseForm，后需要继承父类
class ResetpwdForm(BaseForm):
# 密码重置表单的制作
# class ResetpwdForm(Form):
    oldpwd = StringField(validators=[Length(6,10,message='请输入正确格式的旧密码')])
    newpwd1 = StringField(validators=[Length(6,10,message='请输入正确格式的新密码')])
    # 注意写法，(validators=[('',message="")])，之前出现错误忘了写[]号了
    newpwd2 = StringField(validators=[EqualTo('newpwd1',message="新密码不相等")])


class ResetMailForm(BaseForm):
    email=StringField(validators=[Email(message='请输出正确格式的邮箱')])
    captcha = StringField(validators=[Length(min=6,max=6,message='请输入正确长度的密码')])

    # 针对email与captcha是否对应进行验证
    def validate_captcha(self,field):
        # field此处代表了
        captcha = field.data
        # 为什么用self？
        email = self.email.data
        # 获取cache存储email下对应的验证码
        captcha_cache = lhcache.get(email)
        # not只针对前一个逻辑
        if not captcha_cache or captcha.lower() !=captcha_cache.lower():
            raise ValidationError('邮箱验证码错误')

        # 针对email是否与现有邮箱冲突进行验证
        def validate_email(self,field):
            # 获取后台传入的邮箱
            email=field.data
            # 获取当前用户邮箱,从锥对象导入
            user=g.back_user
            if user.email == email:
                raise ValidationError('不能修改为相同的邮箱')

